home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr01 / jock.zip / TOTSRC11.ZIP / TOTIO2.INC < prev    next >
Text File  |  1993-05-04  |  10KB  |  393 lines

  1. {               Copyright 1991 TechnoJock Software, Inc.               }
  2. {                          All Rights Reserved                         }
  3. {                         Restricted by License                        }
  4.  
  5. {File TOTIO2.INC}
  6.  
  7.  
  8. {||||||||||||||||||||||||||||||||||||||||||||||||}
  9. {                                                }
  10. {     L i s t F i e l d O B J   M E T H O D S    }
  11. {                                                }
  12. {||||||||||||||||||||||||||||||||||||||||||||||||}
  13.  
  14. constructor ListIOOBJ.Init(X1,Y1,width,depth:byte;Title:string);
  15. {}
  16. begin
  17.    MultiLineIOOBJ.Init(X1,Y1,width,depth,Title);
  18.    vTopPick := 1;
  19.    vTotPicks := 0;
  20.    vActivePick := 1;
  21.    vListAssigned := false;
  22.    vScrollBarOn := false;
  23.    vActiveField := false;
  24. end; {ListIOOBJ.Init}
  25.  
  26. procedure ListIOOBJ.SetValue(Hi:integer); {1.00b}
  27. {}
  28. begin
  29.    if (Hi > 0) and (Hi <= vTotPicks) then
  30.    begin
  31.       if Hi - pred(vTopPick) <= vRows then
  32.          vActivepick := Hi - pred(vTopPick)
  33.       else
  34.       begin
  35.          if vRows > 1 then
  36.          begin
  37.             vActivePick := vRows div 2;
  38.             vTopPick := succ(Hi - vActivePick);
  39.          end
  40.          else
  41.          begin
  42.             vActivePick := 1;
  43.             vTopPick := Hi;
  44.          end;
  45.       end;
  46.    end;
  47. end; {ListIOOBJ.SetValue}
  48.  
  49. function ListIOOBJ.Select(K:word; X,Y:byte):TAction;
  50. {}
  51. var New: byte;
  52. begin
  53.    vScrollBarOn := (vTotPicks >= vRows);
  54.    vActiveField := true;
  55.    Display(HiStatus);
  56.    WriteLabel(HiStatus);
  57.    WriteMessage;
  58.    if (K = 513) or (K=523) then
  59.    begin
  60.       if vScrollBarOn and (X = vBorder.X2) then
  61.         {nothing for now}
  62.       else
  63.       begin
  64.          New := HitItem(Y);
  65.          if New > 0 then
  66.          begin
  67.             WriteItem(vActivePick,false);
  68.             vActivePick := New;
  69.             WriteItem(vActivePick,true);
  70.          end;
  71.       end;
  72.    end;
  73.    Select := none;
  74. end; {ListIOOBJ.Select}
  75.  
  76. procedure ListIOOBJ.WriteItem(Item:integer; Selected:boolean);
  77. {}
  78. var
  79.   Str: string;
  80.   High,Nor: byte;
  81.   Status: tStatus;
  82. begin
  83.    if vListAssigned then
  84.    begin
  85.       Str := GetString(pred(vTopPick)+Item);
  86.       if Selected then
  87.          Status := HiStatus
  88.       else
  89.          Status := Norm;
  90.       AssignColors(IOTOT^.vList,IOTOT^.vField,Status,High,Nor);
  91.       if (vActiveField = false) and Selected then
  92.          Nor := IOTOT^.ListCol(2);
  93.       Screen.WriteHi(vBorder.X1,vBorder.Y1+pred(Item),High,Nor,
  94.                      padleft(Str,vBorder.X2-vBorder.X1,' '));
  95.       if Selected and vActiveField then   {1.00e}
  96.          Screen.GotoXY(vBorder.X1,vBorder.Y1+pred(Item));
  97.       if item = vActivePick then
  98.          ShowItemDetails(pred(vTopPick)+Item);
  99.    end;
  100. end; {ListIOOBJ.WriteItem}
  101.  
  102. procedure ListIOOBJ.DisplayAllPicks;
  103. {}
  104. var I : integer;
  105. begin
  106.    for I := 1 to vRows do
  107.        WriteItem(I,(I=vActivePick));
  108. end; {ListIOOBJ.DisplayAllPicks}
  109.  
  110. procedure ListIOOBJ.RefreshScrollBar;
  111. {}
  112. var High,Nor:byte;
  113. begin
  114.    AssignColors(IOTOT^.vList,IOTOT^.vField,Norm,High,Nor);
  115.    with vBorder do
  116.    if vScrollBarOn then
  117.       Screen.WriteVScrollBar(X2,Y1,Y2,Nor,pred(vTopPick+vActivePick),vTotPicks)
  118.    else
  119.       Screen.WriteVert(X2,Y1,Nor,replicate(succ(Y2-Y1),' '));
  120. end; {ListIOOBJ.RefreshScrollBar}
  121.  
  122. function ListIOOBJ.HitItem(Y:byte):byte;
  123. {returns the row number of the item falling on line Y, else returns 0}
  124. var
  125.   B: integer;
  126. begin
  127.     B := Y - pred(vBorder.Y1);
  128.     if (B > vRows) or (B < 0) or (B+pred(vTopPick)>vTotPicks) then
  129.        HitItem := 0
  130.     else
  131.        HitItem := B;
  132. end; {ListIOOBJ.HitItem}
  133.  
  134. procedure ListIOOBJ.ScrollJump(Y:byte);
  135. {}
  136. var
  137.   Tot: integer;
  138. begin
  139.    Tot := vBorder.Y2 - succ(vBorder.Y1);
  140.    Y := Y - vBorder.Y1;
  141.    if vTopPick + Y <= vTotPicks then
  142.    begin
  143.       if vTotPicks <= vRows then
  144.       begin
  145.          WriteItem(vActivePick,false);
  146.          vActivePick := (Y * vTotPicks) div Tot;
  147.          WriteItem(vActivePick,true);
  148.       end
  149.       else
  150.       begin
  151.          vTopPick := (Y * vTotPicks) div Tot;
  152.          vActivePick := 1;
  153.          DisplayAllPicks;
  154.       end;
  155.    end;
  156. end; {of proc ListIOOBJ.ScrollJump}
  157.  
  158. procedure ListIOOBJ.ScrollUp;
  159. {}
  160. begin
  161.    if vActivePick = 1 then
  162.    begin
  163.       if vTopPick > 1 then
  164.       begin
  165.          dec(vTopPick);
  166.          DisplayAllPicks;
  167.       end;
  168.    end
  169.    else
  170.    begin
  171.       WriteItem(vActivePick,false);
  172.       dec(vActivePick);
  173.       WriteItem(vActivePick,True);
  174.    end;
  175. end; {of proc ListIOOBJ.ScrollUp}
  176.  
  177. procedure ListIOOBJ.ScrollDown;
  178. {}
  179. begin
  180.    if pred(vTopPick) + vActivePick < vTotPicks then
  181.    begin
  182.       if vActivePick < vRows then
  183.       begin
  184.          WriteItem(vActivePick,false);
  185.          inc(vActivePick);
  186.          WriteItem(vActivePick,True);
  187.       end
  188.       else
  189.       begin
  190.          inc(vTopPick);
  191.          DisplayAllPicks;
  192.       end;
  193.    end;
  194. end; {of proc ListIOOBJ.ScrollDown}
  195.  
  196. procedure ListIOOBJ.ScrollPgUp;
  197. {}
  198. begin
  199.    if vTopPick > 1 then
  200.    begin
  201.       vTopPick := vTopPick - vRows;
  202.       if vTopPick < 1 then
  203.          vTopPick := 1;
  204.       DisplayAllPicks;
  205.    end
  206.    else if vActivePick <> 1 then
  207.    begin
  208.       WriteItem(vActivePick,false);
  209.       vActivePick := 1;
  210.       WriteItem(vActivePick,True);
  211.    end;
  212. end; {of proc ListIOOBJ.ScrollPgUp}
  213.  
  214. procedure ListIOOBJ.ScrollPgDn;
  215. {}
  216. begin
  217.    if pred(vTopPick + vRows) < vTotPicks then
  218.    begin
  219.       vTopPick := vTopPick + vRows;
  220.       vActivePick := 1;
  221.       DisplayAllPicks;
  222.    end
  223.    else if vActivePick + pred(vTopPick) < vTotPicks then
  224.    begin
  225.       WriteItem(vActivePick,false);
  226.       vActivePick := vTotPicks - pred(vTopPick);
  227.       WriteItem(vActivePick,True);
  228.    end;
  229. end; {of proc ListIOOBJ.ScrollPgDn}
  230.  
  231. procedure ListIOOBJ.ScrollHome;
  232. {}
  233. begin
  234.    if (vTopPick <> 1) or (vActivePick <> 1) then
  235.    begin
  236.       vTopPick := 1;
  237.       vActivePick := 1;
  238.       DisplayAllPicks;
  239.    end;
  240. end; {of proc ListIOOBJ.ScrollHome}
  241.  
  242. procedure ListIOOBJ.ScrollEnd;
  243. {}
  244. begin
  245.    if vTopPick + pred(vRows) >= vTotPicks then {last node on display}
  246.    begin
  247.       WriteItem(vActivePick,False);
  248.       vActivePick := succ(vTotPicks - vTopPick);
  249.       WriteItem(vActivePick,True);
  250.    end
  251.    else
  252.    begin
  253.      vTopPick := vTotPicks - pred(vRows);
  254.      vActivePick := vRows;
  255.      DisplayAllPicks;
  256.    end;
  257. end; {of proc ListIOOBJ.ScrollEnd}
  258.  
  259. procedure ListIOOBJ.Display(Status:tStatus);
  260. {}
  261. var
  262.   BorderCol : byte;
  263.   Style: byte;
  264.   I : integer;
  265. begin
  266.    MultiLineIOOBJ.Display(Status);
  267.    for I := 1 to vRows do
  268. (*
  269.       WriteItem(I,((I=vActivePick) and (Status=HiStatus)));
  270. *)
  271.       WriteItem(I,(I=vActivePick));
  272.  
  273.    if Status <> HiStatus then
  274.       vScrollBarOn := false;
  275.    RefreshScrollBar;
  276. end; {ListIOOBJ.Display}
  277.  
  278. procedure ListIOOBJ.AdjustMouseKey(var InKey: word;X,Y:byte);
  279. {}
  280. begin
  281.    if (X = vBorder.X2) and (vScrollBarOn) then {probably on scroll bar}
  282.    begin
  283.       if Y = vBorder.Y2 then
  284.          InKey := 611
  285.       else if Y = vBorder.Y1 then
  286.          InKey := 610
  287.       else if (Y > vBorder.Y1) and (Y < vBorder.Y2) then
  288.          Inkey := 614;
  289.    end;
  290. end; {ListIOOBJ.AdjustMouseKey}
  291.  
  292. function ListIOOBJ.TargetPick(X,Y:byte): longint;
  293. {}
  294. var Pick:integer;
  295. begin
  296.    Pick := 0;
  297.    if (X >= vBorder.X1) and (X <= vBorder.X2) then
  298.    begin
  299.       Pick := Y - pred(vBorder.Y1);
  300.       if (Pick > 0)
  301.       and (Pick <= vRows)
  302.       and (Pick + pred(vTopPick) <= vTotPicks) then
  303.          {OK}
  304.       else
  305.          Pick := 0;
  306.    end;
  307.    TargetPick := Pick;
  308. end; {ListIOOBJ.TargetPick}
  309.  
  310. procedure ListIOOBJ.MouseChoose(X,Y:byte);
  311. {}
  312. var Pick:integer;
  313. begin
  314.    Pick := TargetPick(X,Y);
  315.    if (Pick <> 0) and (Pick <> vActivePick) then
  316.    begin
  317.       WriteItem(vActivePick,false);
  318.       vActivePick  := Pick;
  319.       WriteItem(vActivePick,True);
  320.    end;
  321. end; {ListIOOBJ.MouseChoose}
  322.  
  323. function ListIOOBJ.SelectPick(InKey:word;X,Y:byte): tAction;
  324. {Semi-abstract}
  325. begin
  326.    SelectPick := NextField;
  327. end; {ListIOOBJ.SelectPick}
  328.  
  329. function ListIOOBJ.ProcessKey(InKey:word;X,Y:byte):tAction;
  330. {}
  331. var
  332.   NextAction: tAction;
  333. begin
  334.    NextAction := none;
  335.    if InKey = 513 then
  336.       AdjustMousekey(Inkey,X,Y);
  337.    case InKey of
  338.       610,
  339.       328,584: ScrollUp; {1.00f}
  340.       32,
  341.       611,
  342.       336,592: ScrollDown;
  343.       513: MouseChoose(X,Y);
  344.       337: ScrollPgDn;
  345.       329: ScrollPgUp;
  346.       335: ScrollEnd;
  347.       327: ScrollHome;
  348.       614: begin  {vertical scroll bar}
  349.               if Y = succ(vBorder.Y1) then
  350.                  ScrollHome
  351.               else if Y = pred(vBorder.Y2) then
  352.                  ScrollEnd
  353.               else
  354.                  ScrollJump(Y); {vertical scroll bar}
  355.            end;
  356.       13,
  357.       523: NextAction := SelectPick(Inkey,X,Y);
  358.    end; {case}
  359.    RefreshScrollBar;
  360.    ProcessKey := NextAction;
  361. end; {ListIOOBJ.ProcessKey}
  362.  
  363. function ListIOOBJ.GetValue: integer;
  364. {}
  365. begin
  366.    if vTotPicks > 0 then    {1.10a}
  367.       GetValue := pred(vTopPick) + vActivePick
  368.    else
  369.       GetValue := 0;
  370. end; {ListIOOBJ.GetValue}
  371.  
  372. function ListIOOBJ.Suspend:boolean;
  373. {}
  374. begin
  375.    vScrollBarOn := false;
  376.    vActiveField := false;
  377.    Suspend := VisibleIOOBJ.Suspend;
  378. end; {ListIOOBJ.Suspend}
  379.  
  380. procedure ListIOOBJ.ShowItemDetails(HiPick: integer);
  381. {abstract}
  382. begin end;
  383. function ListIOOBJ.GetString(Pick:integer): string;
  384. {abstract}
  385. begin end;
  386.  
  387. destructor ListIOOBJ.Done;
  388. {}
  389. begin
  390.    MultiLineIOOBJ.Done;
  391. end; {ListIOOBJ.Done}
  392.  
  393.